activiti 6.0.0 会签环节配置

创建时间:2019/1/25 9:12
来源:https://www.jianshu.com/p/6d76e57c7598


activiti 6.0.0 会签环节配置

96
闲看热闹的 关注
2018.04.13 09:50* 字数 190 阅读 393评论 0喜欢 1

开发环境:

  • jdk8
  • activiti 6.0.0
  • spring boot 1.5.10 (2.0.x版本不兼容 activiti 6.0.0,无法启动)

1. 流程结点关键配置

...
<userTask id="task2" name="审批2 ${user}" activiti:assignee="${user}">
  <extensionElements>
    <activiti:taskListener event="create" delegateExpression="${createTaskListener}">
      <activiti:field name="msg">
        <activiti:string><![CDATA[创建 Task]]></activiti:string>
      </activiti:field>
    </activiti:taskListener>
    <activiti:taskListener event="create" delegateExpression="${completeTaskListener}">
      <activiti:field name="msg">
        <activiti:string><![CDATA[完成 Task]]></activiti:string>
      </activiti:field>
    </activiti:taskListener>
    <modeler:activiti-idm-initiator xmlns:modeler="http://activiti.com/modeler"><![CDATA[true]]></modeler:activiti-idm-initiator>
  </extensionElements>
  <multiInstanceLoopCharacteristics isSequential="false"
    activiti:collection="${userService.getUsers()}"
    activiti:elementVariable="user">
  </multiInstanceLoopCharacteristics>
</userTask>
...

相关参数说明如下:

  • activiti:collection="${userService.getUsers()}" 为使用启动时传入的服务获取会签用户集合
  • activiti:elementVariable="user"为集合中的用户定义的变量,代表单个用户
  • isSequential="false" 取值为 true 时为顺签,false 时为并签
  • <userTask id="task2" name="审批2 ${user}" activiti:assignee="${user}">配置中的activiti:assignee="${user}"为引用集合中的用户定义的变量,使用集合中用户设置处理人

2. 流程启动代码处理

// 构造参数
Map<String, Object> startVars = new HashMap<>();
startVars.put("completeTaskListener", completeTaskListener);
// 设置启动任务创建监听
startVars.put("createTaskListener", createTaskListener);
// 添加服务 ,userService 为注入的服务,用于返回用户信息
startVars.put("userService", userService);
startVars.put("pass", true);

// 使用流程KEY进行启动
ProcessInstance pi = runtimeService.startProcessInstanceByKey("p4", startVars);

UserService

@Service
public class UserService implements Serializable {

    /**
     * 获取环节单一审批人,生产使用应该从数据库配置表中获取
     * @param taskKey
     * @return
     */
    public String getUser(String taskKey) {
        if (taskKey.equals("task1")) {
            return "u2";
        } else if (taskKey.equals("task2")) {
            return "u3";
        }
        return "u1";
    }

    /**
     * 获取集合用户,生产使用应该从数据库配置表中获取
     * @return
     */
    public List<String> getUsers() {
        List<String> listUser = new ArrayList<>();
        listUser.add("manager1");
        listUser.add("manager2");
        listUser.add("manager3");
        listUser.add("manager4");
        return listUser;
    }
}

getUsers()方法用于获取集合用户,提供给会签任务分配用户使用

未完待续...